package com.liusu.common.utils.sm;

import cn.hutool.core.util.HexUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.symmetric.SM4;
import lombok.extern.slf4j.Slf4j;

import javax.crypto.SecretKey;

/**
 * 前端加密请求
 * sm2加密
 * 后端解密后加密返回值
 */
@Slf4j
public class Sm4Utils {

    /**
     * 获取sm4秘钥
     *
     * @return sm4秘钥
     */
    public static String getSm4Key() {
        SM4 sm4 = SmUtil.sm4();
        SecretKey secretKey = sm4.getSecretKey();
        byte[] encoded = secretKey.getEncoded();
        return HexUtil.encodeHexStr(encoded);
    }

    /**
     * sm4加密
     *
     * @param content 文本
     * @param sm4Key  sm4秘钥
     * @return 加密后的结果
     */
    public static String encrypt(String content, String sm4Key) {
        SM4 sm4 = new SM4(HexUtil.decodeHex(sm4Key));
        return sm4.encryptHex(content);
    }

    /**
     * @param content
     * @param sm4Key
     * @return 解密后的结果
     */
    public static String decrypt(String content, String sm4Key) {
        SM4 sm4 = new SM4(HexUtil.decodeHex(sm4Key));
        return sm4.decryptStr(content);
    }
}
